#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : sereach_demo.py
# @Time : 2023/7/2 15:15
# -------------------------------

def binary_search(data_list, target):
    """
    :param data_list:原始列表
    :param target:目标元素
    :return:
    """
    # =======1. 确定查找范围。
    # 第一个元素的下标
    low = 0
    high = len(data_list)-1
    while low <= high:
        # 获取中间元素。向下整除，避免索引有小数点的存在
        mid = (high+low) // 2
        # 如果猜中了，即返回下表
        if data_list[mid] == target:
            return mid
        # 如果中值小于目标值，则修改最小值
        elif data_list[mid] < target:
            low = mid + 1
        # 如果中值大于最大值，则修改最大值
        else:
            high = mid -1
    # 重复以上的过程，直到找到目标元素
    # 或确定目标元素不存在于数组中
    return -1


def test_binary_search():
    assert binary_search([11, 22, 33, 44, 55, 66, 77], 55) == 4
    assert binary_search([11, 22, 33, 44, 55, 66, 77], 88) == -1


